home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / cc04.arc / TPRINT.C < prev    next >
Encoding:
C/C++ Source or Header  |  1986-03-15  |  3.6 KB  |  160 lines

  1.  
  2. /****************************************************************
  3. *                                *
  4. *            P R I N T                *
  5. *                                *
  6. *        ASCII file transfer to PRN device.         *
  7. *                                *
  8. *    T. Jennings 6 Nov. 82                    *
  9. *      created 23 Sept. 82                    *
  10. *                                *
  11. ****************************************************************/
  12.  
  13. #include <stdio.h>
  14. #include <ctype.h>
  15.  
  16. #define    NUL    0x00
  17. #define    CR    0x0d
  18. #define    LF    0x0a
  19. #define    HT    0x09
  20. #define    FF    0x0c
  21. #define    DEL    0x7f
  22.  
  23. #define    PAGELEN    66
  24. #define    BOTTOM    58
  25. FILE *printfile, *fopen();
  26. FILE *printer;
  27. char c;
  28. int line,column;
  29. int tabwidth;
  30. int formfeed;
  31. int number,lineno;
  32. int brackets,brkt_level;
  33. int pageno;
  34. int printable;
  35. int titles;
  36. int margin;
  37. int i;
  38. char filename[12];
  39.  
  40. main(argc,argv)
  41. int argc;
  42. char **argv;
  43. {
  44.     fprintf(stderr,"\nFile Print Utility 6 Nov. 82\n");
  45.     number =0;        /* dont number lines */
  46.     titles= 0;        /* no top of page title */
  47.     margin= 0;        /* no left margin tab */
  48.     brackets =0;        /* dont count brackets */
  49.     brkt_level =0;
  50.     column =0;
  51.     line =0; 
  52.     tabwidth =8;
  53.     formfeed =1;
  54.     lineno =0;        /* current line number, */
  55.     pageno =1;
  56.     printable =0;
  57.  
  58.     if (--argc) {
  59.         if ((printfile=fopen(*++argv,"r")) ==NULL) {
  60.             fprintf(stderr,"PRINT: Can't find file '%s'.\n",*argv);
  61.             exit();
  62.         }
  63.         strcpy(filename,*argv);        /* save filename for title */
  64.  
  65.         if ((printer= fopen("PRN","w")) ==NULL) {
  66.             fprintf(stderr,"PRINT: Can't open LST device\n");
  67.             exit();
  68.         }
  69.         while (--argc) {        /* look for options */
  70.             c= **++argv;
  71.             switch(tolower(c)) {
  72.             case 't':
  73.                 fprintf(stderr,"\t-Page headers\n");
  74.                 titles= 1;
  75.                 break;
  76.             case 'n':        /* line numbers */
  77.                 fprintf(stderr,"\t-Line numbers\n");
  78.                 number =1;
  79.                 break;
  80.             case 'c':        /* C source */
  81.                 fprintf(stderr,"\t-'C' source\n");
  82.                 brackets =1;
  83.                 break;
  84.             case 'm':
  85.                 fprintf(stderr,"\t-Left margin\n");
  86.                 margin= 1;
  87.                 break;
  88.             default:
  89.                 fprintf(stderr,"Illegal option: '%s'\n",*argv);
  90.                 break;
  91.             }
  92.         }
  93.         fprintf(printer,"\033H");    /* motor on, */
  94.         for(i=52; i>0; i--)
  95.             fputc(0xff,printer);
  96.         title();
  97.         printchar(LF);
  98.         while ((i=fgetc(printfile)) !=EOF) {
  99.             c=i;            /* type conversion, */
  100.             printchar(c);        /* print character, */
  101.             if (c =='{')        /* count bracket levels, */
  102.                 ++brkt_level;
  103.             if (c == '}') {        /* if closing bracket, and */
  104.                 if ((--brkt_level ==0) && brackets) {
  105.                     printchar(FF); /* top level, formfeed */
  106.                 }
  107.             }
  108.         }
  109.         fputc(LF,printer);
  110.         fputc(FF,printer);        /* do a formfeed, */
  111.         fprintf(printer,"\033J");    /* motor off, */
  112.         exit();
  113.     }
  114.     fprintf(stderr,"\nYou must specify a file, followed by any options");
  115.     fprintf(stderr,"\n\tT\tTop of page headers");
  116.     fprintf(stderr,"\n\tN\tLine numbers");
  117.     fprintf(stderr,"\n\tC\tC source");
  118.     fprintf(stderr,"\n\tM\tLeft margin");
  119.     fprintf(stderr,"\nExample:  PRINT <filename> N C T M");
  120.     exit();
  121. }
  122. /* Print character <C> to the printer. */
  123.  
  124. printchar(c)
  125. char c;
  126. {
  127.     switch (c) {
  128.     case LF:
  129.         ++lineno;
  130.         fputc(CR,printer);
  131.         fputc(c,printer);        /* then line feed, */
  132.         if (++line >= BOTTOM)         /* if bottom margin, */
  133.             printchar(FF);        /* formfeed, */
  134.         if (number) 
  135.             fprintf(printer,"%3d: \t",lineno);
  136.         if (margin)
  137.             printchar(HT);        /* left margins */
  138.         break;
  139.     case FF:
  140.         fputc(LF,printer);
  141.         fputc(c,printer);
  142.         line =0; ++pageno;
  143.         title();
  144.         break;
  145.     default:
  146.         fputc(c,printer);
  147.         break;
  148.     }
  149.     return;
  150. }
  151. /* If the title flag is set, type the title across the top of the page. */
  152.  
  153. title() {
  154.     if (titles) {
  155.         fprintf(printer,"File: %-12s%58sPage %d\n",filename," ",pageno);
  156.         ++line;
  157.     }
  158.     return;
  159. }
  160.